#!/usr/bin/env python
#encoding latin1

from heap import *

class horario:
	def __init__(self,identificador,inicio,final):
		self.identificador = identificador
		self.inicio = inicio
		self.final = final

"""
Funcion de comparacion, respeta los criterios propuestos por la consigna del TP
"""
def conferencista_comparar(a,b):
	#el que termina primero
	#el que empieza antes
	#el menor identificador
	if a.final < b.final:
		return 1

	if a.final > b.final:
		return -1

	if a.inicio < b.inicio:
		return 1

	if a.inicio > b.inicio:
		return -1

	if a.identificador < b.identificador:
		return 1
	return -1

"""
Post: Devuleve una lista que almacena la clase horario.
"""
def generar_tabla_horarios(fabricas):
	tabla_horarios = list()
	for f in fabricas.keys():
		fabrica = fabricas[f]
		tabla_horarios.append(horario(f,fabrica[1],fabrica[2]))
	return tabla_horarios

"""
Resuelve el problema del conferencista a partir de la tabla de
horarios de cada una de las fabricas.
"""
def resolver_horarios(tabla_horarios):
	solucion = list()
	miheap = heap(conferencista_comparar)
	for i in tabla_horarios:
		miheap.encolar(i)
	ultimo_horario = 0
	while miheap.count > 0:
		horario = miheap.desencolar()
		if horario.inicio >= ultimo_horario:
			ultimo_horario = horario.final
			solucion.append(horario.identificador)
	return solucion
